import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Clase padre de los obstáculos, Los objetos StarFox deben esquivarlos
 * 
 * @author Luis Guajardo Olvera
 * @author Daniel Romero Martí
 */
public abstract class Obstaculo extends Actor
{
    private int profundidad;
    private int aumentaTam;
    private int damage;
    private boolean hit;

    /**
     * Constructor de la clase Obstaculo
     */
    public Obstaculo()
    {
        aumentaTam=8;
        profundidad=0;
        hit=false;
    }

    /**
     * Regresa el valor de la variable profundidad
     */
    public int profundidad()
    {
        return profundidad;
    }
    
    /**
     * Modifica el valor de la variable profundidad
     */
    public void profundidad(int cant)
    {
        profundidad=cant;
    }
    
    /**
     * Regresa el valor de la variable aumentaTam
     */
    public int aumentaTam()
    {
        return aumentaTam;
    }
    
    /**
     * Modifica el valor de la variable aumentaTam
     */
    public void aumentaTam(int cant)
    {
        aumentaTam=cant;
    }
    
    /**
     * Regresa el valor de la variable damage
     */
    public int damage()
    {
        return damage;
    }
    
    /**
     * Modifica el valor de la variable damage
     */
    public void damage(int cant)
    {
        damage=cant;
    }

    /**
     * Regresa el valor de la variable hit
     */
    public boolean hit()
    {
        return hit;
    }

    /**
     * Act - do whatever the Obstaculo wants to do. This method is called whenever
     * the 'Act' or 'Run' button gets pressed in the environment.
     */
    public void act(int unaCantidad) 
    {
        mueve();
        aumentaTam++;
        desaparece(unaCantidad);
    }    

    /**
     * Verifica si el obstáculo está tocando a un objeto de la clase StarFox
     */
    public void estaTocando(int unaCantidad)
    {   
        World mundo = getWorld();
        java.util.List naves = mundo.getObjects(StarFox.class);
        StarFox nave = (StarFox)naves.get(0);
        if(profundidad==nave.profundidad() && intersects(nave) && hit==false)
        {
            nave.disminuyeVida(unaCantidad);
            hit=true;
        }
    }

    /**
     * Remueve al objeto del mundo
     */
    public void desaparece(int unaCantidad)
    { 
        World world;
        world=super.getWorld();
        if(super.getX()==world.getWidth() ||super.getY()==world.getHeight())
            world.removeObject(this);
        else
            estaTocando(unaCantidad);
    }

    /**
     * Método a ser redefinido
     */
    public abstract void mueve();
}
